Шаг 23 - VariantCopy.

Освобождает принимающий вариант и копирует исходный.

HRESULT VariantCopy
( 
VARIANTARG FAR* pvargDest, 
VARIANTARG FAR* pvargSrc
);

Параметры
pvargDest
Указатель на VARIANTARG, принимающий копию.
pvargSrc
Указатель на копируемый VARIANTARG.

Коды возврата
Из возвращенного HRESULT получают один из следующих кодов возврата:
Код возврата Значение
S_OK Успех.
DISP_E_ARRAYISLOCKED Вариант содержит заблокированный массив.
DISP_E_BADVARTYPE Исходный или принимающий вариант имеют недопустимый тип (обычно не инициализированы).
E_OUTOFMEMORY He хватает памяти для копирования.
E_INVALIDARG Один из аргументов неверен.

Комментарии
Сначала память, владельцем которой является pvargDest, освобождается так же, как при вызове VariantClear (pvargDest должен указывать на инициализированный вариант, а не просто на неинициализированный блок памяти). Затем в pvargDest помещается точная копия содержимого pvargSrc.
Если pvargSrc имеет тип VT_BSTR, то копируется строка. Если pvargSrc — это VT_ARRAY, то копируется весь массив. Если pvargSrc — это VT_DISPATCH или VT_UNKNOWN, то вызывается AddRef для увеличения счетчика ссылок объекта.

Hosted by uCoz